package nettyteach.endecoder;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import io.netty.util.CharsetUtil;

import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 创建客户端handler
 */
@ChannelHandler.Sharable
public class HandlerClientFixedLength extends SimpleChannelInboundHandler<String> {
    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, String info) {
        /**
         * 处理接收到的消息
         */
        System.out.println("接收到的消息为"+info.trim());
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        super.exceptionCaught(ctx, cause);
        /**
         * 处理异常
         */
        cause.printStackTrace();
        ctx.close();
    }
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
//        super.channelActive(ctx);
        //通道处于活动状态触发的动作，该方法只会在通道建立时调用一次
//        //写入并发送信息到远端（客户端）
//        SimpleDateFormat df=new SimpleDateFormat("HH:mm:ss SSS");//设置日期格式
//        String strDate=df.format(new Date());
//        ctx.writeAndFlush(Unpooled.copiedBuffer("这是客户端在Active方法中反馈的消息"+strDate+"\r\n",CharsetUtil.UTF_8));
        //设置日期格式
          SimpleDateFormat df=new SimpleDateFormat("HH:mm:ss sss");
          String strDate=df.format(new Date());
          String strMsg="您好，服务器" +strDate;
          //由于是发送定长消息，我们需要判断消息的长度，如果小于指定长度则补空格
          strMsg=CommonTools.formatString(strMsg,CommonTools.FIXEDLENGTHFRAME_LENGTH);
        System.out.println("已经连上服务器，现在开始发送消息"+strMsg);
        ctx.writeAndFlush(Unpooled.copiedBuffer(strMsg, CharsetUtil.UTF_8));
    }



}
